Non-volatile memories, such as flash EPROM (erasable programmable read-only memory) devices have developed into a popular source of memory in a wide range of digital applications. Flash memory devices typically allow for high memory densities, high reliability, and low power consumption. These characteristics have made flash memory very popular for low power applications, such as embedded memory circuits. Common uses of non-volatile memory include portable computers, personal digital assistant (PDA) devices, digital cameras, cellular telephones, TV boxes, routers, copy machines, and any number of other consumer products. In these devices, both program code and system data, such as configuration parameters and other firmware, are often stored in flash memory, because of the compact storage and relative ease of software upgradeability.
Non-volatile memories are also often used in these systems to store modular and upgradeable information, such as basic input/output system (BIOS) code, so pieces of the platform may be updated without having to frequently replace components in the system. Traditionally, BIOS' primary function was to boot a computer system, which entailed recognition and loading of various system hardware components, in preparation for other programs or code, such as an operating system, to assume control. An extensible firmware interface (EFI) has also been developed to allow operating system independent drivers to interface with system hardware components/devices.
In addition, to the traditional usage of EFI and BIOS to boot a computer system, both have also been used at operating system (OS) runtime, i.e. the duration of an operating system's execution. For example, many platforms include a system management mode (SMM), which performs firmware tasks in response to system management interrupts (SMIs). As a specific example, a device inserted at runtime is detected by firmware and a system management interrupt is generated to notify an OS of the insertion. However, SMM is often imposed across all processors and steals valuable execution cycles away from executing applications. In addition, as SMIs are often generated asychronously in response to system events, an OS is not able to predictably provide Quality of Service (QoS).